<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2019/1/20
 * Time: 08:44
 */

namespace app\modules\visitor\controller;

use app\modules\visitor\Group;
use app\modules\visitor\RoleVisitor;
use app\modules\visitor\User;
use yii\web\Controller;

class DefaultController extends Controller
{
    /**
     * 访问者模式示例
     * 访问者模式可以让你将对象操作外包给其他对象。这样做的最主要原因就是关注（数据结构和数据操作）分离
     * 但是被访问的类必须定一个契约接受访问者。 (详见例子中的 Role::accept 方法)
     * 契约可以是一个抽象类也可直接就是一个接口。在此情况下，每个访问者必须自行选择调用访问者的哪个方法
     *
     * @date   2019/1/20
     * @author edmmss
     * @return bool
     */
    public function actionIndex()
    {
        $roleVisitor = new RoleVisitor();

        $user = new User('edmmss');
        $user->accept($roleVisitor);

        $group = new Group('701');
        $group->accept($roleVisitor);
        $group->accept($roleVisitor);

        var_dump($roleVisitor->getVisited());

        return true;
    }
}